
class Person {
    private String name;
    private int age;
    private String sex;
    //静态成员变量
    public static String country;

    //实例代码块
    {
        //一般用来初始化成员变量
        this.name = "xiaoli";
        this.age = 19;
        System.out.println("实例代码块");
    }

    //静态代码块
    static {
        country = "中国";
        System.out.println("静态代码块1");
    }
    static {
        country = "China";
        System.out.println("静态代码块2");
    }

    //构造方法
    public Person() {
        System.out.println("不带参数的构造方法！");
    }
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Person(String name, int age, String sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    //Getter和Setter
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public void show() {
        System.out.println("姓名："+this.name+" 年龄："+this.age);
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                '}';
    }
}
public class Test7_2 {
    public static void main(String[] args) {

//        //普通代码块 非常少用
//        {
//            int a = 10;
//            System.out.println(a);
//        }
//        //System.out.println(a);//error,出了大括号就不能使用a了

//        //Person.country = "中国";
//        Person person = new Person();
//        person.show();
//        //输出结果 ：
//        //实例代码块
//        //不带参数的构造方法！
//        //姓名：xiaoli 年龄：19
//        //说明--->实例代码块比构造方法先执行，和位置无关
//        //静态代码块比实例代码块更早执行
//        //加上静态代码块后的执行结果 ：
//        //静态代码块
//        //实例代码块
//        //不带参数的构造方法！
//        //姓名：xiaoli 年龄：19
//        Person person1 = new Person();
//        //现在的输出结果 ：
//        //静态代码块
//        //实例代码块
//        //不带参数的构造方法！
//        //姓名：xiaoli 年龄：19
//        //实例代码块
//        //不带参数的构造方法！
//        //说明静态代码块只执行一次
//
//        //加上静态代码块2后的输出结果 ：
//        //静态代码块1
//        //静态代码块2  //有两个静态的代码块的话，谁在前先执行谁
//        //实例代码块
//        //不带参数的构造方法！
//        //姓名：xiaoli 年龄：19
//        //实例代码块
//        //不带参数的构造方法！

//        //不定义对象
//        System.out.println(Person.country);
//        //输出结果 ：
//        //静态代码块1
//        //静态代码块2
//        //China
//        //说明只要类被加载，静态代码块就会执行
//        //实例代码块一定是实例化对象的时候才会被执行

        //
        Person person = new Person();
        System.out.println(person);
        //直接输出结果为： Person@1b6d3586
        //加了toString方法之后输出结果 ：Person{name='xiaoli', age=19, sex='null'}
        Person person1 = null;
        person1.show();
    }
}
